package pl.un4giv3n.mightvsmagic.action;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import pl.un4giv3n.mightvsmagic.entity.Action;
import pl.un4giv3n.mightvsmagic.entity.ActionType;
import pl.un4giv3n.mightvsmagic.entity.Item;
import pl.un4giv3n.mightvsmagic.entity.User;
import pl.un4giv3n.mightvsmagic.utils.ActionUtil;
import pl.un4giv3n.mightvsmagic.utils.ItemUtil;
import static pl.un4giv3n.mightvsmagic.utils.ItemUtil.RENAME_COST;
import static pl.un4giv3n.mightvsmagic.utils.ItemUtil.SHARPEN_COST; 
/**
 * @author andrzejewskia
 * go-to-train-jsp page action
 */
public class RenameItemPageAction extends PersistenceAction {

	private static final long serialVersionUID = 1L;
	
	/**
	 * session user
	 */
	private User user;
	private Long itemId;
	private Action currentAction;
	private String sharpenPriceText;
	private String renamePriceText;

	private boolean sharpened;

	@Override
	public String execute() {
		EntityManager entityManager = getEntityManager();
		user = getSessionUser(entityManager);
		if (user == null) {
			addActionError("Zaloguj się");
			entityManager.close();
			return LOGIN;
		}
		currentAction = user.getCurrentAction();
		if (currentAction != null
				&& currentAction.getActionType().equals(ActionType.FIGHT)) {
			if (ActionUtil.actionEnded(currentAction, user)) {
				EntityTransaction transaction = entityManager
						.getTransaction();
				transaction.begin();
				user.setCurrentAction(Action.NO_ACTION);
				entityManager.merge(user);
				entityManager.flush();
				transaction.commit();
				currentAction = Action.NO_ACTION;
			}
		}
		Item item = entityManager.find(Item.class, itemId);
		if(item == null){
			addActionError("Nie znaleziono przedmiotu o podanym id!");
			entityManager.close();
			return ERROR;
		}
		if(!ItemUtil.canBesSharpened(item)){
			sharpenPriceText ="Ten przedmiot nie nadaje się do zaklinania.";
			sharpened = true;
		}else {
			sharpenPriceText ="Mogę też zakląć bron tak, by jej obrażenia minimalne i maksymalne zwiększyły się o jeden. To będzie kosztować "+SHARPEN_COST+" smoczych zębów";
		}
		if(user.isPremium()){
			renamePriceText = "Widzę, że zacny gość mnie odwiedził, dla ciebie wypalę imię na tym przedmiocie za darmo";
		}else {
			renamePriceText = "Witaj, mogę dla ciebie wypalić tekst na tym przedmiocie za "+RENAME_COST+" smoczy ząb";
		}
		entityManager.close();
		if (currentAction == null || currentAction.equals(Action.NO_ACTION)) {
			return SUCCESS;
		} else {
			return ERROR;
		}
	}

	public User getUser() {
		return user;
	}

	public Long getItemId() {
		return itemId;
	}

	public void setItemId(Long itemId) {
		this.itemId = itemId;
	}
	
	@Override
	public String getActionEndString() {
		return ActionUtil.getActionEndDate(currentAction, user);
	}

	public String getSharpenPriceText() {
		return sharpenPriceText;
	}

	public String getRenamePriceText() {
		return renamePriceText;
	}

	public boolean isSharpened() {
		return sharpened;
	}
	
}
